package utils

import (
	"fmt"
	"github.com/robfig/cron/v3"
	"goadmin/logs"
	"time"
)

// 全局cron实例，确保只初始化一次
var cronInstance *cron.Cron

// 初始化cron实例
func init() {
	cronInstance = cron.New()
	cronInstance.Start()
}

// 添加定时任务并返回任务ID
func AddScheduledTask(spec string, task func()) (cron.EntryID, error) {
	if cronInstance == nil {
		return 0, fmt.Errorf("cron实例未初始化")
	}

	// 添加指定的定时任务
	id, err := cronInstance.AddFunc(spec, task)
	if err != nil {
		return 0, fmt.Errorf("添加定时任务失败: %v", err)
	}

	return id, nil
}

// 停止所有定时任务
func StopAllTasks() {
	if cronInstance != nil {
		cronInstance.Stop()
	}
}

// 示例：添加预设的定时任务
func RunTasks() error {
	// 每天凌晨0点执行
	_, err := AddScheduledTask("0 0 * * *", func() {
		printTime := "每日0点任务执行: " + time.Now().Format("2006-01-02 15:04:05")
		logs.Sugar().Info("每日0点任务执行", printTime)
	})
	if err != nil {
		logs.Sugar().Info("错误:AddTasks-1", err)
	}

	// 每小时的第30分钟执行
	_, err = AddScheduledTask("30 * * * *", func() {
		printTime := "每小时任务执行: " + time.Now().Format("2006-01-02 15:04:05")
		logs.Sugar().Info("每小时任务执行", printTime)
		// 执行每小时需要处理的业务
	})
	if err != nil {
		logs.Sugar().Info("错误:AddTasks-2", err)
	}
	//每5分钟执行一次的任务
	_, err = AddScheduledTask("*/5 * * * *", func() {
		printTime := "每5分钟执行的任务执行: " + time.Now().Format("2006-01-02 15:04:05")
		logs.Sugar().Info("每5分钟执行一次的任务", printTime)
	})
	if err != nil {
		logs.Sugar().Info("错误:AddTasks-3", err)
	}
	return err
}
